/**
 * 公共文件，用于key值获取，进制转化，创建共享内存，获取共享内存
 */
#include <iostream>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <cassert>
#include <unistd.h>
#include <string>
#include <cstring>

#define PATH "./"
#define PROJID 0x333
#define SIZE 4096
const mode_t mode = 0666;

//机制转化，转16机制
std::string toHEX(int x)
{
    /**
     * parame: x:一个十进制整数
     * return: string:16进制字符串
     * @return
     */
    char buff[128];
    snprintf(buff,sizeof(buff),"0x%x",x);
    return buff;
}

//获取key
key_t getKey()
{
    /**
     * return : ket_t :返回key值
     * @return 
     */
    key_t key = ftok(PATH,PROJID);
    assert(key!=-1);//失败就终止进程   
    return key;
}

//创建共享内存
int createShm(key_t key,size_t size)
{
    /**
     * parame: key 标识符
     * param: size 创建size大小的共享内存
     * return： 返回共享内存id
     * @return
     */
    int id = shmget(key,size,IPC_CREAT|IPC_EXCL|mode);
    assert(id!=-1);
    return id;
}

//获取共享内存
int getShm(key_t key,size_t size)
{
    /**
     * parame: key 标识符
     * param: size 创建size大小的共享内存
     * return： 返回共享内存id
     * @return
     */
    int id = shmget(key,size,IPC_CREAT);
    assert(id!=-1);
    return id;
}